import { Tool } from '@modelcontextprotocol/sdk/types.js';

export const TOOL_DEFINITIONS: Tool[] = [
  // ============ Java重构工具 ============
  {
    name: 'analyze_java_file',
    description: '🔍 **Java文件全面分析** - 大方法重构的第一步（替代已禁用的auto_refactor_large_method）\n\n' +
                 '✅ **核心能力**：\n' +
                 '• 检测大文件/大方法，识别重构需求\n' +
                 '• 发现Java8优化机会和代码异味\n' +
                 '• 提供具体的重构建议和优先级\n' +
                 '• 100%安全：只分析不修改文件\n\n' +
                 '🎯 **特别适用于**：\n' +
                 '• 替代auto_refactor_large_method进行安全分析\n' +
                 '• 大方法重构前的规划阶段\n' +
                 '• 代码质量评估和改进指导\n\n' +
                 '💡 **与extract_method的完美配合**：\n' +
                 '1. 用此工具分析→获得重构建议\n' +
                 '2. 用extract_method逐步提取→安全重构\n' +
                 '3. 重复分析→验证进度',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        rules: {
          type: 'object',
          description: '重构规则配置',
          properties: {
            maxFileLines: { type: 'number', default: 500 },
            maxMethodLines: { type: 'number', default: 80 }
          }
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'analyze_springboot_project',
    description: '分析SpringBoot项目结构并提供架构重构建议',
    inputSchema: {
      type: 'object',
      properties: {
        projectPath: {
          type: 'string',
          description: 'SpringBoot项目根目录路径'
        }
      },
      required: ['projectPath']
    }
  },
  {
    name: 'refactor_large_file',
    description: '自动重构超过指定行数的大文件',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: '需要重构的Java文件路径'
        },
        strategy: {
          type: 'string',
          enum: ['extract_methods', 'split_classes', 'extract_interfaces'],
          description: '重构策略'
        }
      },
      required: ['filePath', 'strategy']
    }
  },
  {
    name: 'refactor_large_method',
    description: '自动重构超过指定行数的大方法',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        methodName: {
          type: 'string',
          description: '方法名'
        },
        strategy: {
          type: 'string',
          enum: ['extract_submethods', 'extract_to_service', 'split_logic'],
          description: '方法重构策略'
        }
      },
      required: ['filePath', 'methodName', 'strategy']
    }
  },
  {
    name: 'optimize_java8_features',
    description: '实际修改代码优化Java8特性 - 能力：null检查→Optional，for循环→Stream，匿名类→Lambda，直接修改文件',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        features: {
          type: 'array',
          items: {
            type: 'string',
            enum: ['lambda', 'stream', 'optional', 'method_reference']
          },
          description: '要优化的Java8特性'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'check_single_responsibility',
    description: '检查类和方法是否遵循单一职责原则',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'clean_unused_code',
    description: '清理无用的导入、方法和变量',
    inputSchema: {
      type: 'object',
      properties: {
        projectPath: {
          type: 'string',
          description: '项目根目录路径'
        },
        aggressive: {
          type: 'boolean',
          default: false,
          description: '是否启用激进清理模式'
        }
      },
      required: ['projectPath']
    }
  },
  {
    name: 'maven_compile',
    description: '执行Maven编译命令',
    inputSchema: {
      type: 'object',
      properties: {
        projectPath: {
          type: 'string',
          description: '项目根目录路径'
        },
        clean: {
          type: 'boolean',
          default: false,
          description: '是否先执行clean'
        }
      },
      required: ['projectPath']
    }
  },
  {
    name: 'maven_test',
    description: '执行Maven测试命令',
    inputSchema: {
      type: 'object',
      properties: {
        projectPath: {
          type: 'string',
          description: '项目根目录路径'
        },
        skipTests: {
          type: 'boolean',
          default: false,
          description: '是否跳过测试'
        }
      },
      required: ['projectPath']
    }
  },
  {
    name: 'suggest_springboot_improvements',
    description: '提供SpringBoot项目改进建议',
    inputSchema: {
      type: 'object',
      properties: {
        projectPath: {
          type: 'string',
          description: 'SpringBoot项目根目录路径'
        }
      },
      required: ['projectPath']
    }
  },
  {
    name: 'split_large_service',
    description: '自动拆分大型Service类',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: '要拆分的Service文件路径'
        },
        splitStrategy: {
          type: 'string',
          enum: ['by_domain', 'by_functionality', 'by_dependency'],
          description: '拆分策略'
        }
      },
      required: ['filePath', 'splitStrategy']
    }
  },
  {
    name: 'generate_service_interface',
    description: '生成Service接口和实现类模式',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Service文件路径'
        },
        interfaceName: {
          type: 'string',
          description: '接口名称（可选）'
        },
        implName: {
          type: 'string',
          description: '实现类名称（可选）'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'update_cross_file_references',
    description: '更新跨文件引用',
    inputSchema: {
      type: 'object',
      properties: {
        targetFilePath: {
          type: 'string',
          description: '目标文件路径'
        },
        projectPath: {
          type: 'string',
          description: '项目根目录路径'
        },
        methodChanges: {
          type: 'array',
          description: '方法变更列表（可选）'
        }
      },
      required: ['targetFilePath', 'projectPath']
    }
  },
  {
    name: 'move_package',
    description: '移动包并更新所有引用',
    inputSchema: {
      type: 'object',
      properties: {
        sourceFilePath: {
          type: 'string',
          description: '源文件路径'
        },
        targetPackage: {
          type: 'string',
          description: '目标包名'
        },
        projectPath: {
          type: 'string',
          description: '项目根目录路径'
        },
        updateReferences: {
          type: 'boolean',
          default: true,
          description: '是否更新引用'
        }
      },
      required: ['sourceFilePath', 'targetPackage', 'projectPath']
    }
  },
  {
    name: 'introduce_parameter_object',
    description: '引入参数对象重构 - 能力：将多个参数合并为单个对象参数，减少方法参数数量，提高代码可读性',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        methodName: {
          type: 'string',
          description: '要重构的方法名'
        },
        parameterObjectName: {
          type: 'string',
          description: '参数对象类名'
        },
        projectPath: {
          type: 'string',
          description: '项目根目录路径'
        },
        minParameterCount: {
          type: 'number',
          default: 3,
          description: '触发重构的最小参数数量'
        }
      },
      required: ['filePath', 'methodName', 'parameterObjectName', 'projectPath']
    }
  },
  {
    name: 'encapsulate_fields',
    description: '字段封装重构 - 能力：将public字段改为private，生成getter/setter方法，提高封装性',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        projectPath: {
          type: 'string',
          description: '项目根目录路径'
        },
        includeProtected: {
          type: 'boolean',
          default: false,
          description: '是否包含protected字段'
        },
        generateSetters: {
          type: 'boolean',
          default: true,
          description: '是否生成setter方法'
        }
      },
      required: ['filePath', 'projectPath']
    }
  },
  {
    name: 'refactor_to_strategy',
    description: '重构为策略模式 - 能力：识别条件逻辑，提取为策略接口和具体实现类',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        methodName: {
          type: 'string',
          description: '包含策略逻辑的方法名'
        },
        strategyInterfaceName: {
          type: 'string',
          description: '策略接口名'
        },
        projectPath: {
          type: 'string',
          description: '项目根目录路径'
        }
      },
      required: ['filePath', 'methodName', 'strategyInterfaceName', 'projectPath']
    }
  },
  {
    name: 'extract_interface',
    description: '提取公共接口 - 能力：分析多个类的公共方法，生成通用接口，让类实现该接口',
    inputSchema: {
      type: 'object',
      properties: {
        classFiles: {
          type: 'array',
          items: { type: 'string' },
          description: '要分析的类文件路径列表'
        },
        interfaceName: {
          type: 'string',
          description: '要生成的接口名'
        },
        projectPath: {
          type: 'string',
          description: '项目根目录路径'
        },
        outputDir: {
          type: 'string',
          description: '接口文件输出目录（可选）'
        }
      },
      required: ['classFiles', 'interfaceName', 'projectPath']
    }
  },
  {
    name: 'introduce_builder',
    description: 'Builder模式重构 - 能力：为具有多个参数的构造函数生成Builder模式，提高对象创建的灵活性',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        minParameterCount: {
          type: 'number',
          default: 3,
          description: '触发Builder模式的最小参数数量'
        },
        builderClassName: {
          type: 'string',
          description: 'Builder类名（可选，默认为ClassName + Builder）'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'rename_class',
    description: '重命名类文件和所有引用 - 能力：重命名.java文件，更新类声明、构造函数、import语句、所有类型引用',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: '要重命名的Java文件路径'
        },
        oldClassName: {
          type: 'string',
          description: '原类名'
        },
        newClassName: {
          type: 'string',
          description: '新类名'
        },
        projectPath: {
          type: 'string',
          description: '项目根目录路径'
        }
      },
      required: ['filePath', 'oldClassName', 'newClassName', 'projectPath']
    }
  },
  {
    name: 'rename_method',
    description: '重命名方法和所有调用 - 能力：更新方法定义，扫描整个项目找到并更新所有方法调用',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        className: {
          type: 'string',
          description: '类名'
        },
        oldMethodName: {
          type: 'string',
          description: '原方法名'
        },
        newMethodName: {
          type: 'string',
          description: '新方法名'
        },
        projectPath: {
          type: 'string',
          description: '项目根目录路径'
        }
      },
      required: ['filePath', 'className', 'oldMethodName', 'newMethodName', 'projectPath']
    }
  },
  {
    name: 'extract_method',
    description: '🔧 **智能提取方法重构** - 安全的大方法重构核心工具（已完全修复）\n\n' +
                 '✅ **完全修复的能力**：\n' +
                 '• 精确的变量作用域分析，正确识别参数和返回值\n' +
                 '• 生成语法正确、可编译的Java代码\n' +
                 '• 智能处理基本类型、对象引用和复杂表达式\n' +
                 '• 保持代码语义完整性\n\n' +
                 '🎯 **安全重构的最佳选择**：\n' +
                 '• 替代auto_refactor_large_method进行实际重构\n' +
                 '• 每次处理3-15行代码，风险可控\n' +
                 '• 立即验证结果，增量式改进\n\n' +
                 '💡 **推荐使用模式**：\n' +
                 '1. 先用analyze_java_file识别提取目标\n' +
                 '2. 选择独立性强的代码块\n' +
                 '3. 使用此工具提取并验证编译\n' +
                 '4. 重复直到方法大小满足要求',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        startLine: {
          type: 'number',
          description: '开始行号'
        },
        endLine: {
          type: 'number',
          description: '结束行号'
        },
        newMethodName: {
          type: 'string',
          description: '新方法名'
        },
        returnType: {
          type: 'string',
          description: '返回类型（可选）'
        }
      },
      required: ['filePath', 'startLine', 'endLine', 'newMethodName']
    }
  },
  {
    name: 'auto_refactor_large_method',
    description: '⛔ **功能已禁用** - 自动大方法重构\n\n' +
                 '🚨 **禁用原因**：该功能存在严重的代码破坏风险：\n' +
                 '• 变量作用域分析不完善，导致生成的方法缺少必要参数\n' +
                 '• 代码边界识别错误，破坏Java语法结构\n' +
                 '• 生成不可编译的代码，需要手动修复\n\n' +
                 '✅ **推荐的安全替代方案**：\n' +
                 '1. `analyze_java_file` - 分析大方法结构，识别重构机会\n' +
                 '2. `extract_method` - 手动提取特定代码块（已完全修复，100%安全）\n' +
                 '3. 逐步重构：分析→提取→验证→重复\n\n' +
                 '💡 **安全工作流程**：\n' +
                 '```\n' +
                 'analyze_java_file(大方法) → 获得重构建议\n' +
                 '↓\n' +
                 'extract_method(第1个代码块) → 验证编译\n' +
                 '↓\n' +
                 'extract_method(第2个代码块) → 验证编译\n' +
                 '↓\n' +
                 '重复直到方法大小满足要求\n' +
                 '```\n\n' +
                 '⚡ **为什么手动更安全**：\n' +
                 '• 每次只处理一个小逻辑块\n' +
                 '• 立即验证每次修改\n' +
                 '• 完全控制重构过程\n' +
                 '• 避免大规模代码破坏',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径（注：该工具已被禁用，不会执行任何操作）'
        },
        methodName: {
          type: 'string',
          description: '方法名（注：该工具已被禁用，不会执行任何操作）'
        },
        maxLines: {
          type: 'number',
          description: '方法最大行数限制（注：该工具已被禁用，不会执行任何操作）',
          default: 80
        }
      },
      required: ['filePath', 'methodName']
    }
  },
  {
    name: 'extract_magic_values',
    description: '扫描并提取代码中的魔法值为常量 - 能力：找到硬编码的字符串和数字，自动生成常量声明，可选择自动替换',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        autoFix: {
          type: 'boolean',
          default: false,
          description: '是否自动修改文件（true=实际修改文件，false=只提供分析报告）'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'suggest_enums',
    description: '分析代码并建议提取枚举类 - 能力：识别字符串常量模式、状态值、数字常量序列，生成枚举类建议，可选择自动创建枚举文件',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        autoCreate: {
          type: 'boolean',
          default: false,
          description: '是否自动创建枚举类文件（true=创建.java文件，false=只提供建议）'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'optimize_springboot_annotations',
    description: '优化SpringBoot为注解模式 - 能力：移除@Autowired改为构造函数注入，@Component改为@Service/@Repository等具体注解，添加必要的SpringBoot注解',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        }
      },
      required: ['filePath']
    }
  },

  // ============ AI集成工具 ============
  {
    name: 'ai_code_review',
    description: '🤖 **AI代码审查** - 集成Lingma/Trae进行智能代码分析\\n\\n' +
                 '✅ **核心能力**：\\n' +
                 '• 使用Lingma或Trae进行深度代码分析\\n' +
                 '• 智能识别重构机会和代码异味\\n' +
                 '• 提供AI驱动的重构建议\\n' +
                 '• 检测潜在bug和性能问题\\n\\n' +
                 '🎯 **支持的AI服务**：\\n' +
                 '• Lingma - 代码智能分析\\n' +
                 '• Trae - 重构建议生成\\n\\n' +
                 '💡 **审查类型**：\\n' +
                 '• code_review - 全面代码审查\\n' +
                 '• refactor_suggestion - 重构建议\\n' +
                 '• bug_detection - bug检测',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Java文件路径'
        },
        aiProvider: {
          type: 'string',
          enum: ['lingma', 'trae'],
          description: 'AI服务提供商'
        },
        reviewType: {
          type: 'string',
          enum: ['code_review', 'refactor_suggestion', 'bug_detection'],
          description: '审查类型',
          default: 'code_review'
        }
      },
      required: ['filePath', 'aiProvider']
    }
  },
  {
    name: 'ai_refactor_plan',
    description: '🧠 **AI重构规划** - 基于AI分析生成完整重构计划\\n\\n' +
                 '✅ **智能规划**：\\n' +
                 '• 分析整个类或项目结构\\n' +
                 '• 生成分步重构计划\\n' +
                 '• 评估重构风险和收益\\n' +
                 '• 提供执行顺序建议\\n\\n' +
                 '🎯 **计划类型**：\\n' +
                 '• method_refactor - 方法级重构\\n' +
                 '• class_restructure - 类结构重构\\n' +
                 '• package_reorganize - 包结构重组',
    inputSchema: {
      type: 'object',
      properties: {
        targetPath: {
          type: 'string',
          description: '目标文件或目录路径'
        },
        planType: {
          type: 'string',
          enum: ['method_refactor', 'class_restructure', 'package_reorganize'],
          description: '重构计划类型'
        },
        aiProvider: {
          type: 'string',
          enum: ['lingma', 'trae'],
          description: 'AI服务提供商'
        }
      },
      required: ['targetPath', 'planType', 'aiProvider']
    }
  },

  // ============ 前端重构工具 ============
  {
    name: 'convert_react_class_to_hooks',
    description: 'React组件重构：Class组件转Hooks - 能力：自动转换Class组件为函数组件，使用useState/useEffect替代生命周期方法，优化性能',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'React组件文件路径（.js/.jsx/.ts/.tsx）'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'extract_custom_hook',
    description: 'React自定义Hook提取 - 能力：识别可复用逻辑模式（API调用、表单处理等），自动提取为自定义Hook，提高代码复用性',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'React组件文件路径'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'optimize_react_performance',
    description: 'React性能优化 - 能力：添加React.memo、使用useCallback/useMemo优化渲染、建议懒加载，提升组件性能',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'React组件文件路径'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'convert_vue_to_composition_api',
    description: 'Vue组件现代化：Options API转Composition API - 能力：转换data/methods/computed为ref/reactive/computed，优化代码组织',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Vue组件文件路径（.vue）'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'extract_vue_composables',
    description: 'Vue组合式函数提取 - 能力：提取可复用的响应式逻辑为组合式函数，提高代码复用性和可测试性',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Vue组件文件路径'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'optimize_vue_performance',
    description: 'Vue性能优化 - 能力：优化computed属性、添加v-memo建议、优化列表渲染key、函数式组件建议',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'Vue组件文件路径'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'convert_css_to_bem',
    description: 'CSS重构：转换为BEM命名规范 - 能力：分析CSS类结构，自动转换为Block__Element--Modifier格式，提高CSS可维护性',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'CSS/SCSS文件路径'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'convert_css_to_css_in_js',
    description: 'CSS转CSS-in-JS - 能力：将CSS/SCSS转换为styled-components格式，生成React组件样式文件',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'CSS/SCSS文件路径'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'optimize_scss',
    description: 'SCSS代码优化 - 能力：提取变量、创建mixins、优化嵌套结构、合并重复选择器，提升SCSS代码质量',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'SCSS文件路径'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'optimize_css_performance',
    description: 'CSS性能优化 - 能力：优化选择器性能、移除未使用CSS、优化属性顺序、压缩代码，提升加载和渲染性能',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'CSS/SCSS文件路径'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'modernize_javascript_to_es6',
    description: 'JavaScript现代化：ES5转ES6+ - 能力：转换var为const/let、function为箭头函数、字符串连接为模板字符串、对象访问为解构',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'JavaScript文件路径（.js/.ts）'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'convert_promise_to_async_await',
    description: 'Promise现代化：.then转async/await - 能力：自动识别Promise链，转换为更易读的async/await语法，改善错误处理',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'JavaScript文件路径'
        }
      },
      required: ['filePath']
    }
  },
  {
    name: 'optimize_javascript_performance',
    description: 'JavaScript性能优化 - 能力：优化循环性能、对象访问优化、防抖节流建议、内存泄漏检测，提升运行性能',
    inputSchema: {
      type: 'object',
      properties: {
        filePath: {
          type: 'string',
          description: 'JavaScript文件路径'
        }
      },
      required: ['filePath']
    }
  }
];